import { defineStore } from 'pinia'
import { authApi } from '@/api'
export const useUserStore = defineStore('user', {
  state: () => ({
    token: null, // 初始化为null，避免过期token导致的问题
    userInfo: {},
    menuList: [
      {
        path: '/dashboard',
        title: '仪表盘',
        icon: 'House'
      },
      {
        path: '/system',
        title: '系统管理',
        icon: 'Setting',
        children: [
          {
            path: '/system/users',
            title: '用户管理',
            icon: 'User'
          },
          {
            path: '/system/role',
            title: '角色管理',
            icon: 'Avatar'
          },
          {
            path: '/system/permission',
            title: '权限管理',
            icon: 'Lock'
          },
          {
            path: '/system/menu',
            title: '菜单管理',
            icon: 'Menu'
          },
          {
            path: '/system/operationLog',
            title: '日志管理',
            icon: 'Notebook'
          },
          {
            path: '/system/config',
            title: '系统配置',
            icon: 'Setting'
          }
        ]
      },

    ]
  }),

  getters: {
    // 获取菜单列表
    getMenuList: (state) => {
      return state.menuList
    }
  },
  
  actions: {
    // 初始化用户状态
    initUserState() {
      const token = localStorage.getItem('token')
      const userInfo = localStorage.getItem('userInfo')
      const userId = localStorage.getItem('userId')
      
      console.log('初始化用户状态 - localStorage数据:', {
        hasToken: !!token,
        hasUserInfo: !!userInfo,
        hasUserId: !!userId,
        userId: userId
      })

      // 检查并清理开发环境自动生成的无效数据
      if (userId && userId.startsWith('dev-user-id-')) {
        console.log('🧹 检测到开发环境自动生成的数据，正在清理...')
        this.clearUserState()
        return
      }
      
      if (token && userInfo) {
        try {
          const parsedUserInfo = JSON.parse(userInfo)
          
          // 检查是否是开发环境自动生成的数据
          if (parsedUserInfo.id && parsedUserInfo.id.startsWith('dev-user-id-')) {
            console.log('🧹 检测到开发环境自动生成的用户数据，正在清理...')
            this.clearUserState()
            return
          }
          
          this.token = token
          this.userInfo = parsedUserInfo
          
          // 确保userInfo中包含id字段
          if (userId && !this.userInfo.id) {
            this.userInfo.id = userId
            localStorage.setItem('userInfo', JSON.stringify(this.userInfo))
          }
          
          // 确保用户ID有值（优先级：userInfo.id > localStorage.userId）
          if (!this.userInfo.id && userId) {
            this.userInfo.id = userId
          } else if (!this.userInfo.id && !userId) {
            console.warn('⚠️ 用户ID丢失，可能需要重新登录')
            this.clearUserState()
            return
          }
          
          console.log('用户状态初始化成功:', { 
            token: !!this.token, 
            userInfo: this.userInfo,
            userId: this.userInfo.id
          })
        } catch (error) {
          console.error('解析用户信息失败:', error)
          this.clearUserState()
        }
      } else {
        console.log('未找到有效的用户状态，需要登录')
        // 确保状态清空
        this.token = null
        this.userInfo = {}
      }
    },

    // 清除用户状态
    clearUserState() {
      console.log('🧹 开始清除用户状态')
      this.token = null
      this.userInfo = {}
      localStorage.removeItem('token')
      localStorage.removeItem('userInfo')
      localStorage.removeItem('userId')  // 清除用户ID
      localStorage.removeItem('user')
      localStorage.removeItem('pwd')
      // 设置退出登录标志，告诉路由守卫这是退出登录操作
      localStorage.setItem('logging-out', 'true')
      console.log('🧹 用户状态清除完成，已设置退出登录标志')
    },

    async login(username, password, rememberMe = false) {
      console.log('🔐 开始登录流程:', { username, rememberMe })
      
      try {
        console.log('📡 发送登录请求...')
        
        const res = await authApi.login({
          Username: username,    // 后端期望大写字段名
          Password: password,    // 后端期望大写字段名
          RememberMe: rememberMe // 后端期望大写字段名
        })

        console.log('✅ 登录API响应:', res)
        console.log('✅ 响应类型:', typeof res)
        console.log('✅ 响应字段:', Object.keys(res))

        // 检查响应格式
        if (!res || !res.token) {
          console.error('❌ 登录响应格式错误:', res)
          throw new Error('登录响应格式错误')
        }

        // 查找用户ID字段（兼容多种格式）
        const userId = res.UserId || res.userId || res.id || res.Id
        console.log('🔍 用户ID字段查找:', {
          'res.UserId': res.UserId,
          'res.userId': res.userId, 
          'res.id': res.id,
          'res.Id': res.Id,
          '最终用户ID': userId
        })
        
        if (!userId) {
          console.error('❌ 登录响应中缺少用户ID字段:', res)
          throw new Error('登录响应中缺少用户ID')
        }
        
        // 设置store状态
        this.token = res.token
        this.userInfo = {
          id: userId,  // 使用找到的用户ID
          username: res.username || res.Username,
          email: res.email || res.Email
        }
        
        console.log('✅ 设置用户信息:', {
          userId: userId,
          username: res.username || res.Username,
          email: res.email
        })
        
        // 存储token到localStorage
        localStorage.setItem('token', this.token)
        localStorage.setItem('userInfo', JSON.stringify(this.userInfo))
        localStorage.setItem('userId', userId)  // 使用找到的用户ID
        
        console.log('✅ 登录数据存储完成:', {
          token: !!this.token,
          userId: userId,
          userInfo: this.userInfo
        })
        
        console.log('✅ 登录成功')
        
        // 清除退出登录标志
        localStorage.removeItem('logging-out')
        
        // 记住密码逻辑
        if (rememberMe) {
          localStorage.setItem('user', username)
          localStorage.setItem('pwd', password)
        } else {
          localStorage.removeItem('user')
          localStorage.removeItem('pwd')
        }
        
        // 返回成功标志
        return res
      } catch (err) {
        const msg = err.message || '登录失败'
        throw new Error(msg)
      }
    },
    async register(username, password, email, phone) {
      try {
        await authApi.register({
          username,
          password,
          email,
          phone
        })
      } catch (err) {
        const msg = err.message || '注册失败'
        throw new Error(msg)
      }
    },
    async logout() {
      try {
        console.log('🚪 开始退出登录...')
        
        // 获取当前token
        const token = this.token || localStorage.getItem('token')
        
        if (token) {
          console.log('📡 调用后端退出登录接口...')
          // 调用后端退出登录接口，将token加入黑名单
          await authApi.logout({ token })
          console.log('✅ 后端退出登录成功')
        } else {
          console.log('⚠️ 没有找到token，跳过后端退出登录')
        }
      } catch (error) {
        console.warn('❌ 后端退出登录接口调用失败，但继续清除本地状态:', error)
      } finally {
        // 无论如何都要清除本地状态
        this.clearUserState()
        console.log('🧹 用户状态已清除')
      }
    }
  }
})